インフラエンジニアのためのCodeCommitで覚えるユニットテスト

インフラエンジニアのためのCodeCommitで覚えるユニットテスト

私のようなインフラエンジニアの中にはPythonに興味があるかたが多いように感じています。 本記事では、Code Commitに絡めてPythonのユニットテストに関係する2点を紹介し、ユニットテストやCode Commitの利用イメージをお伝えします。 1. Pythonでプログラムを作成、テストし、オリジンにpushする流れ 1. 機能追加してプルリクエストする流れ
Clock Icon2018.05.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

私のようなインフラエンジニアの中にはPythonに興味があるかたが多いように感じています。 本記事では、CodeCommitに絡めてPythonのユニットテストに関係する2点を紹介し、ユニットテストやCodeCommitの利用イメージをお伝えします。

  1. Pythonでプログラムを作成、テストし、オリジンにpushする流れ
  2. 機能追加してプルリクエストする流れ

電卓プログラムの作成

足し算機能を持つ電卓プログラムを作成します。 作成したプログラムをテストし、オリジンにpushします。

CodeCommitでリポジトリを作成

リポジトリの作成

CodeCommitのコンソールに接続し、リポジトリを作成します。 リポジトリ名はpython-calculatorとしました。

リポジトリのクローン

リポジトリを作成すると、git cloneする手順が表示されます。 大きく以下の手順になります。

  1. IAMユーザーに公開鍵を登録
  2. SSH 設定ファイルにCodeCommitへの接続情報を記載
  3. ローカルにクローンを作成する

クローンに成功すると、ローカルにpython-calculatorディレクトリが作成されます。

電卓プログラムの作成

足し算の関数を作成し、calc.pyとして保存します。

def plus(x,y):
    return x + y

足し算関数のユニットテスト

足し算関数のテストを行います。 testsディレクトリにテストファイル(test_calc.py)を配置します。 __pycache__は自動で作成されます。

$ tree
.
├── __pycache__
│   └── calc.cpython-35.pyc
├── calc.py
└── tests
    ├── __pycache__
    │   └── test_calc.cpython-35.pyc
    └── test_calc.py

3 directories, 4 files
$

test_calc.pyは以下のようにします。 assertEqualは第1引数と第2引数がイコールになるか確認します。 テストプログラムでは、calc.pyのplus関数に引数3と5を与えて、8になるか確認します。 ユニットテストフレームワークの詳細は公式ドキュメントをご覧ください。

import unittest
import calc

class TestCalc(unittest.TestCase):
    def test_plus(self):
        self.assertEqual(calc.plus(3,5), 8)

ユニットテストを実行すると、"OK"になります。

$ python3 -m unittest tests.test_calc
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
$

「self.assertEqual(calc.plus(3,5), 8)」を「self.assertEqual(calc.plus(2,7), 10)」に変更して、テストを実行します。 2+7は9なので、テストに失敗します。

$ python3 -m unittest tests.test_calc
F
======================================================================
FAIL: test_plus (tests.test_calc.TestCalc)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tests/test_calc.py", line 6, in test_plus
    self.assertEqual(calc.plus(2,7), 10)
AssertionError: 9 != 10

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)
$

オリジンへのpush

オリジンにpushしましょう。

git add ./*
git commit -m "initial commit"
git push origin master

CodeCommitコンソールに反映されていれば、成功です。

電卓プログラムへの機能追加

作成した電卓プログラムには、足し算の機能しかありません。 引き算の機能を追加、テストし、プルリクエストします。

devブランチの作成

開発用のdevブランチを作成します。

$ git checkout -b dev
Switched to a new branch 'dev'
$ git branch
* dev
  master
$

引き算関数の追加

calc.pyに引き算関数(minus)を追加します。

def plus(x,y):
    return x + y

def minus(x,y):
    return x - y

引き算関数のユニットテスト

引き算関数をテストします。 test_minus関数をtest_calc.pyに追加します。 10引く3をminus関数で実行し、7になるかをテストします。

import unittest
import calc

class TestCalc(unittest.TestCase):
    def test_plus(self):
        self.assertEqual(calc.plus(3,5), 8)
    def test_minus(self):
        self.assertEqual(calc.minus(10,3), 7)

ユニットテストを実行すると、OKになります。

$ python3 -m unittest tests.test_calc
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
$

プルリクエストの作成

devブランチをオリジンにpushします。

git add ./*
git commit -m "add minus function"
git push origin dev

CodeCommitコンソールに反映されます。

プルリクエストの作成

プルリクエストの作成を選択します。

devとmasterを比較します。 コンフリクトがなく、マージ可能なことがわかります。

変更内容が表示されます。 minus関数が追加されていることがわかります。

タイトル、説明を記載してプルリクエストを作成します。

プルリクエストのマージ

プルリクエストをマージします。

引き算機能(minus関数)がmasterに反映されました。

さいごに

CodeCommitに絡めてPythonのユニットテストを紹介しました。 電卓プログラムに足し算の関数を作成して、ユニットテストを行いました。 テストに合格したプログラムはCodeCommitにpushしました。

devブランチを作成し、引き算の関数を追加しました。 引き算についてもユニットテストを行い、合格したプログラムをプルリクエストしました。 CodeCommitコンソールから、devとmasterの差分を確認し、マージしました。

本記事がCodeCommitやユニットテストの理解に役立てば幸いです。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.